﻿﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using fuzhu;
using System.Threading;
using System.Data.SqlClient;
using Process;
using System.IO;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraEditors.Repository;
using LKU8.shoukuan.Model;
using WanJi_Morder_Import;
using Newtonsoft.Json;
 

namespace LKU8.shoukuan
{
    public partial class UC_WanJi_Morder_Import : UserControl
    {


        //DataTable dtGongxu;
        //数据源
        BindingList<WanJi_Morder_View> dataList = new BindingList<WanJi_Morder_View>();
        string url;
        string chk2;
        //是否检查过数据
        Boolean bChecked = false;
        //导入检查
        Boolean bCheckU8 = false;
        public UC_WanJi_Morder_Import()
        {
            InitializeComponent();
      
        }

        #region 加载
      private void UserControl1_Load(object sender, EventArgs e)
        { 
             
            //重绘表格
            //gridView1.PopulateColumns();
            //绑定edit 
            //ClsGridViewBindStyle.Bind(cTable, gridView1,CanShu.conStr);
            //更新布局
            string fileName = CommonHelper.currenctDir + CanShu.cMenuname;
            if (File.Exists(fileName))
            {
                gridView1.RestoreLayoutFromXml(fileName);
            }
            
          //读取URL的信息，工时取数地址
            string sql = "select cvalue from zdy_xw_para where lx=8";

            url =DbHelper.GetDbString( DbHelper2.ExecuteScalar(sql,CanShu.conStr));

            //登陆本机电脑的时候，显示连接客户账套按钮
            if (DbHelper.GetDbString(CanShu.u8Login.cComputerName) == "WIN-20230711URG")
            {
                this.button1.Visible = true;
            }
            else
            {
                this.button1.Visible = false;
            }

            List<InvLoopUpEntity> lstSMT = InvService.GetList("SMT", CanShu.conStr);
            repSMTLookUp.DataSource = lstSMT;
            repSMTLookUp.ValueMember = "存货编码";
            repSMTLookUp.DisplayMember = "存货编码";

            List<InvLoopUpEntity> lstDIP = InvService.GetList("DIP", CanShu.conStr);
            repDIPLookUp.DataSource = lstDIP;
            repDIPLookUp.ValueMember = "存货编码";
            repDIPLookUp.DisplayMember = "存货编码";

            List<InvLoopUpEntity> lstHOU = InvService.GetList("后道", CanShu.conStr);
            repHOULookUp.DataSource = lstHOU;
            repHOULookUp.ValueMember = "存货编码";
            repHOULookUp.DisplayMember = "存货编码";

        }
        #endregion

#region 增加
      public void Menu_Add()
        {
            try
            {
                //打开文件对话框
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Title = "选择万吉制造订单Excel文件";
                ofd.Filter = "Excel files(*.xls,*.xlsx,*.xlsm)|*.xls;*.xlsx;*.xlsm|All files(*.*)|*.*";
                ofd.Multiselect = false;

                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    string selectFileName = ofd.FileName;
                    
                    // 首先验证Excel文件格式
                    string validationResult = WanJiExcelImportHelper.ValidateExcelFormat(selectFileName);
                    if (!validationResult.Contains("验证通过"))
                    {
                        MessageBox.Show(validationResult, "Excel格式验证失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }

                    // 获取所有工作表名称
                    List<string> sheetNames = WanJiExcelImportHelper.GetSheetNames(selectFileName);
                    int selectedSheetIndex = 0;
                    
                    // 如果有多个工作表，显示选择对话框
                    if (sheetNames.Count > 1)
                    {
                        using (SheetSelectionForm sheetForm = new SheetSelectionForm(sheetNames))
                        {
                            if (sheetForm.ShowDialog(this) == DialogResult.OK)
                            {
                                selectedSheetIndex = sheetForm.SelectedSheetIndex;
                            }
                            else
                            {
                                return; // 用户取消选择
                            }
                        }
                    }

                    // 使用新的Excel导入助手导入数据
                    dataList = WanJiExcelImportHelper.ImportFromExcel(selectFileName, selectedSheetIndex);

                    // 绑定到GridControl
                    gridControl1.DataSource = dataList;
                    gridControl1.RefreshDataSource();

                    // 显示导入结果
                    string sheetInfo = sheetNames.Count > 1 ? string.Format(" (工作表: {0})", sheetNames[selectedSheetIndex]) : "";
                    MessageBox.Show(string.Format("成功导入 {0} 条记录{1}", dataList.Count, sheetInfo), "导入成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    bChecked = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("导入Excel文件时发生错误：" + ex.Message, "导入失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
        }
        #endregion

       #region 删除
      public void Menu_Del()
       {


           gridView1.PostEditor();
           gridView1.CloseEditor();
           //已录入时间的，怎么处理
           int j = 0;
           DialogResult result = CommonHelper.MsgQuestion("确认要删除已勾选行吗？");
           if (result == DialogResult.Yes)
           {
               try
               {
                   for (int i = dataList.Count - 1; i >= 0; i--)
                   {
                       if (dataList[i].chk)
                       {
                            
                          
                               dataList.RemoveAt(i);
                               j++; 
                       }
                   }
               }
               catch (Exception ex)
               {
                   //DbHelper.RollbackAndCloseConnection(tran);
                   CommonHelper.MsgError("删除失败！原因：" + ex.Message);
               }
               if (j > 0)
               {
                   CommonHelper.MsgInformation("删除完成！");
                   
               }
           }
           //Cx();
       }
       #endregion


      #region 检查已导入的数据
      public void Menu_CheckU8()
      {
          try
          {
              label1.Focus();
              gridView1.PostEditor();
              string str = "";	//整个检查的结果
              string strrow = "";	//每一行的结果，写到导入结果
              string cQianZhui = "";//订单前缀，用于查询同类型生产订单
              if (dataList.Count > 0)
              {
                  cQianZhui = dataList[0].cMoCode.Substring(0, 5);
              }
              else
              {
                  MessageBox.Show("请先导入表格数据");
                  return;
              }
              //20251012 去掉了根据前缀查询
              List<WanJi_Morder_View> lstu8 = MorderService.GetList( CanShu.conStr);

              //查询datalist里cMoCode，在listU8里的数据，并设置bU8=true
              int matchedCount = 0;
              // 提取lstu8中的所有cMoCode到一个HashSet中，提高查找效率
              HashSet<string> u8MoCodes = new HashSet<string>(lstu8.Select(m => m.cMoCode));
              //MessageBox.Show(u8MoCodes.Count.ToString());
              for (int i = 0; i < dataList.Count; i++)
              {
                  if (u8MoCodes.Contains(dataList[i].cMoCode.Trim()))
                  {
                      dataList[i].bU8 = true;
                      matchedCount++;
                  }
                  else
                  {
                      dataList[i].bU8 = false;
                  }
              }

              //刷新数据
              gridControl1.RefreshDataSource();
              gridView1.RefreshData();

              //显示匹配结果
              MessageBox.Show(string.Format("已成功匹配 {0} 条在U8中存在的生产订单", matchedCount), "匹配完成", MessageBoxButtons.OK, MessageBoxIcon.Information);
              bCheckU8 = true;
          }
          catch (Exception ex)
          {
              MessageBox.Show(ex.Message);

          }
      }
      #endregion

          #region 删除已导入U8的行
        /// <summary>
        /// 删除BU8= true的行
        /// </summary>
      public void Menu_DelBU8()
       {
            gridView1.PostEditor();
            gridView1.CloseEditor();
            int deleteCount = 0;
            
            // 从后往前遍历，避免删除元素后索引问题
            for (int i = dataList.Count - 1; i >= 0; i--)
            {
                if (dataList[i].bU8)
                {
                    dataList.RemoveAt(i);
                    deleteCount++;
                }
            }
            
            // 刷新数据
            gridControl1.RefreshDataSource();
            gridView1.RefreshData();
            
            // 提示删除完成
            if (deleteCount > 0)
            {
                CommonHelper.MsgInformation(string.Format("已成功删除 {0} 条已导入U8的记录", deleteCount));
            }
            else
            {
                CommonHelper.MsgInformation("没有找到已导入U8的记录");
            }
       }
       #endregion


      #region 检查数据是否完整
      /// <summary>
      /// 检查数据是否完整
      /// </summary>
      public void Menu_CheckData()
      {
           try
          {
        //1、逐行检查，检查cMoCode,dDate,iQty是否输入
        //2、检查cinvCodeSMT,cInvCodeDIP,cInvCodeHou，三个里面必须有一个数值
        //3、相同cMoCode的行里，cinvCodeSMT,cInvCodeDIP,cInvCodeHou不能有重复的
        //4、检查不为空的cinvCodeSMT,cInvCodeDIP,cInvCodeHou，是否存在，判断invserivce.IsInvCodeExists
        //5、如果当前行有错误，写入到【导入错误】栏目里，并在检查完成后，FrmMsg弹窗提示

          //确保数据已提交
          gridView1.PostEditor();
          gridView1.CloseEditor();

          int errorCount = 0;
          //用于跟踪相同工单号的存货编码
          Dictionary<string, List<string>> moCodeInvCodes = new Dictionary<string, List<string>>();

          for (int i = 0; i < dataList.Count; i++)
          {
              WanJi_Morder_View item = dataList[i];
              string errorMsg = string.Empty;

              //1. 检查cMoCode,dDate,iQty是否输入
              if (string.IsNullOrEmpty(item.cMoCode))
              {
                  errorMsg += "工单号不能为空；";
              }
              if (item.dDate == null || item.dDate == DateTime.MinValue)
              {
                  errorMsg += "订单日期不能为空；";
              }
              if (item.iQty <= 0)
              {
                  errorMsg += "订单批量必须大于0；";
              }

              //检查销售订单和MRP计划有没有下达
              //销售订单号，如果没有录入，默认工单号+S
              if (string.IsNullOrEmpty(item.cSoCode))
              {
                  string cSoCode = item.cMoCode + "S";
                  if (!PlanService.IsSoCodeExists(cSoCode, CanShu.conStr))
                  {
                      errorMsg += string.Format("销售订单{0}不存在；", cSoCode);
                  }
                  else
                  {
                      item.cSoCode = cSoCode;
                      if (!PlanService.IsPlanExists(item.cSoCode, CanShu.conStr))
                      {
                          errorMsg += string.Format("MRP计划{0}未下达；", item.cSoCode);
                      }
                  }
              }
              else
              {
                  if (!PlanService.IsPlanExists(item.cSoCode, CanShu.conStr))
                  {
                      errorMsg += string.Format("MRP计划{0}未下达；", item.cSoCode);
                  }
              }

              

              //20250914 取消，改成检查MRP计划有没有

              ////2. 检查cinvCodeSMT,cInvCodeDIP,cInvCodeHou，三个里面必须有一个数值
              //if (string.IsNullOrEmpty(item.cInvCodeSMT) && string.IsNullOrEmpty(item.cInvCodeDIP) && string.IsNullOrEmpty(item.cInvCodeHou))
              //{
              //    errorMsg += "SMT/DIP/后道存货编码至少有一个不能为空；";
              //}

              ////3. 相同cMoCode的行里，cinvCodeSMT,cInvCodeDIP,cInvCodeHou不能有重复的
              //if (!string.IsNullOrEmpty(item.cMoCode))
              //{
              //    if (!moCodeInvCodes.ContainsKey(item.cMoCode))
              //    {
              //        moCodeInvCodes[item.cMoCode] = new List<string>();
              //    }

              //    //检查并收集非空的存货编码
              //    List<string> invCodesToCheck = new List<string>();
              //    if (!string.IsNullOrEmpty(item.cInvCodeSMT)) invCodesToCheck.Add(item.cInvCodeSMT);
              //    if (!string.IsNullOrEmpty(item.cInvCodeDIP)) invCodesToCheck.Add(item.cInvCodeDIP);
              //    if (!string.IsNullOrEmpty(item.cInvCodeHou)) invCodesToCheck.Add(item.cInvCodeHou);

              //    foreach (string invCode in invCodesToCheck)
              //    {
              //        if (moCodeInvCodes[item.cMoCode].Contains(invCode))
              //        {
              //            errorMsg += string.Format("工单号{0}的存货编码{1}重复；", item.cMoCode, invCode);
              //        }
              //        else
              //        {
              //            moCodeInvCodes[item.cMoCode].Add(invCode);
              //        }
              //    }
              //}

              ////4. 检查不为空的cinvCodeSMT,cInvCodeDIP,cInvCodeHou，是否存在
              //try
              //{
              //    if (!string.IsNullOrEmpty(item.cInvCodeSMT) )
              //    {
              //        InventoryEntity inv = InvService.GetEntity(item.cInvCodeSMT, CanShu.conStr);
              //        if (inv ==null)
              //        {
              //            errorMsg += string.Format("SMT存货编码{0}不存在；", item.cInvCodeSMT);
              //        }
              //        else if (string.IsNullOrEmpty(inv.cDefWareHouse))
              //        {
              //            errorMsg += string.Format("SMT存货编码{0}默认仓库不存在；", item.cInvCodeSMT);
              //        }
              //        else if (string.IsNullOrEmpty(inv.cInvDepCode))
              //        {
              //            errorMsg += string.Format("SMT存货编码{0}默认部门不存在；", item.cInvCodeSMT);
              //        }
              //        else
              //        {
              //            item.cWhCodeSMT = inv.cDefWareHouse;
              //            item.cDepCodeSMT = inv.cInvDepCode;
              //        }
              //        //检查BOM是否存在
              //        if (!InvService.IsBOMExists(item.cInvCodeSMT, CanShu.conStr))
              //        {
              //            errorMsg += string.Format("SMT存货编码{0}BOM不存在；", item.cInvCodeSMT);
              //        }
                     
              //    }
              //    if (!string.IsNullOrEmpty(item.cInvCodeDIP) )
              //    {
              //        InventoryEntity inv = InvService.GetEntity(item.cInvCodeDIP, CanShu.conStr);
              //        if (inv == null)
              //        {
              //            errorMsg += string.Format("DIP存货编码{0}不存在；", item.cInvCodeDIP);
              //        }
              //        else if (string.IsNullOrEmpty(inv.cDefWareHouse))
              //        {
              //            errorMsg += string.Format("DIP存货编码{0}默认仓库不存在；", item.cInvCodeDIP);
              //        }
              //        else if (string.IsNullOrEmpty(inv.cInvDepCode))
              //        {
              //            errorMsg += string.Format("DIP存货编码{0}默认部门不存在；", item.cInvCodeDIP);
              //        }
              //        else
              //        {
              //            item.cWhCodeDIP = inv.cDefWareHouse;
              //            item.cDepCodeDIP = inv.cInvDepCode;
              //        }
              //        //检查BOM是否存在
              //        if (!InvService.IsBOMExists(item.cInvCodeDIP, CanShu.conStr))
              //        {
              //            errorMsg += string.Format("DIP存货编码{0}BOM不存在；", item.cInvCodeDIP);
              //        }
                     
              //    }
              //    if (!string.IsNullOrEmpty(item.cInvCodeHou)  )
              //    {
              //        InventoryEntity inv = InvService.GetEntity(item.cInvCodeHou, CanShu.conStr);
              //        if (inv == null)
              //        {
              //            errorMsg += string.Format("后道存货编码{0}不存在；", item.cInvCodeHou);
              //        }
              //        else if (string.IsNullOrEmpty(inv.cDefWareHouse))
              //        {
              //            errorMsg += string.Format("后道存货编码{0}默认仓库不存在；", item.cInvCodeHou);
              //        }
              //        else if (string.IsNullOrEmpty(inv.cInvDepCode))
              //        {
              //            errorMsg += string.Format("后道存货编码{0}默认部门不存在；", item.cInvCodeHou);
              //        }
              //        else
              //        {
              //            item.cWhCodeHOU = inv.cDefWareHouse;
              //            item.cDepCodeHOU = inv.cInvDepCode;
              //        }
              //        //检查BOM是否存在
              //        if (!InvService.IsBOMExists(item.cInvCodeHou, CanShu.conStr))
              //        {
              //            errorMsg += string.Format("后道存货编码{0}BOM不存在；", item.cInvCodeHou);
              //        }
              //    }
              //}
              //catch (Exception ex)
              //{
              //    errorMsg += string.Format("检查存货编码时发生错误：{0}；", ex.Message);
              //}

              //5. 如果当前行有错误，写入到【导入错误】栏目里
              if (!string.IsNullOrEmpty(errorMsg))
              {
                  item.cImportResult = errorMsg;
                  errorCount++;
              }
              else
              {
                  item.cImportResult = "";
              }
          }

          //刷新数据
          gridControl1.RefreshDataSource();
          gridView1.RefreshData();

          //检查完成后，设置bChecked为true，表示已经进行了数据检查
              bChecked = true;
              
              //检查完成后，弹窗提示
              if (errorCount > 0)
              {
                  MessageBox.Show("检查完成，发现" + errorCount + "条错误记录，请查看【导入错误】列了解详情。\n请注意：虽然已标记为已检查，但包含错误的数据将不会被导入。");
              }
              else
              {
                  MessageBox.Show("检查完成，所有数据均符合要求！");
              }
          }
           catch (Exception ex)
           {
               MessageBox.Show("检查数据时发生错误：" + ex.Message, "失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
               return;
           }
      }
      #endregion


       public void Menu_Checkall()
       {
           if (string.IsNullOrEmpty(chk2))
           {
               for (int i = 0; i < gridView1.RowCount; i++)
               {
                   gridView1.SetRowCellValue(i, "chk", true);
                   gridView1.UpdateCurrentRow();
               }
               chk2 = "chkAll";
           }
           else
           {
               for (int i = 0; i < dataList.Count; i++)
               {
                   gridView1.SetRowCellValue(i, "chk", false);
                   gridView1.UpdateCurrentRow();
               }
               chk2 = string.Empty;
           }

           label1.Focus();
           gridView1.Focus();
       }



       #region 布局
       public void Menu_SaveBuju()
       {
           string fileName = CommonHelper.currenctDir + CanShu.cMenuname;
           gridView1.SaveLayoutToXml(fileName);
           CommonHelper.MsgInformation("保存布局成功！");

       }

       public void Menu_DelBuju()
       {


           string fileName = CommonHelper.currenctDir + CanShu.cMenuname; 
          if (File.Exists(fileName))
          {
              File.Delete(fileName);
              CommonHelper.MsgInformation("删除布局成功，请重新打开！");
          }
          else
          {
              CommonHelper.MsgInformation("布局未保存，无需删除！");
          }
         
          
       }
      
       #endregion

       #region 生成生产订单
       public void Menu_ImportMo()
       {
           try
           {
               gridView1.PostEditor();
               gridView1.UpdateCurrentRow();
               if (bCheckU8 == false)
               {
                   MessageBox.Show("请先进行已导入U8匹配");
                   return;
               }
               //如果有勾选已匹配U8的，提示先删除
               var checkU8lst = dataList.Where(item => item.bU8==true);
               if (checkU8lst.Count() > 0)
               {
                   MessageBox.Show("请先删除已导入U8数据");
                   return;
               }
               if (bChecked == false)
               {
                   MessageBox.Show("请先进行数据检查");
                   return;
               }

               /*生成U8 生成生产订单；  按生产订单进行分组，每个分组重新组成List<WanJi_Morder_View>推送， 
              如果本行 cInvCodeDIP,cInvCodeHOU栏目内有数值的,单独
                拆成单独一行，都填写在cInvCodeSMT,对应的cWhCodeDIP,cDepCodeDIP，cWhCodeHOU,cDepCodeHOU，也写入到cWhCodeSMT,cDepCodeSMT
               */
               //按生产订单分组
               var groupedOrders = dataList.GroupBy(item => item.cMoCode);
               
               int totalProcessedCount = 0;
               int totalSuccessCount = 0;
               
               //遍历每个生产订单分组
               foreach (var group in groupedOrders)
               {
                   WanJi_Morder_View_Lst lst = new WanJi_Morder_View_Lst();
                   lst.vouList = new List<WanJi_Morder_View>();
                   
                   //处理每个分组中的行
                   foreach (WanJi_Morder_View item in group)
                   {
                       WanJi_Morder_View smtItem = CreateNewItem(item);
                       //SMT的信息已经在原始对象中，不需要额外设置
                       lst.vouList.Add(smtItem);
                       totalProcessedCount++;
                           //1. 处理SMT存货编码（如果有值）
                           //if (!string.IsNullOrEmpty(item.cInvCodeSMT))
                           //{
                           //    WanJi_Morder_View smtItem = CreateNewItem(item);
                           //    //SMT的信息已经在原始对象中，不需要额外设置
                           //    lst.vouList.Add(smtItem);
                           //    totalProcessedCount++;
                           //}
                           
                           ////2. 处理DIP存货编码（如果有值）
                           //if (!string.IsNullOrEmpty(item.cInvCodeDIP))
                           //{
                           //    WanJi_Morder_View dipItem = CreateNewItem(item);
                           //    //将DIP信息转移到SMT字段
                           //    dipItem.cInvCodeSMT = item.cInvCodeDIP;
                           //    dipItem.cWhCodeSMT = item.cWhCodeDIP;
                           //    dipItem.cDepCodeSMT = item.cDepCodeDIP;
                           //    dipItem.cOperation = "DIP";
                           //    lst.vouList.Add(dipItem);
                           //    totalProcessedCount++;
                           //}
                           
                           ////3. 处理后道存货编码（如果有值）
                           //if (!string.IsNullOrEmpty(item.cInvCodeHou))
                           //{
                           //    WanJi_Morder_View houItem = CreateNewItem(item);
                           //    //将后道信息转移到SMT字段
                           //    houItem.cInvCodeSMT = item.cInvCodeHou;
                           //    houItem.cWhCodeSMT = item.cWhCodeHOU;
                           //    houItem.cDepCodeSMT = item.cDepCodeHOU;
                           //    houItem.cOperation = "后道";
                           //    lst.vouList.Add(houItem);
                           //    totalProcessedCount++;
                           //}
                       //}
                   }
                   
                   //如果当前分组有数据需要推送
                   if (lst.vouList.Count > 0)
                   {
                       lst.cMaker = CanShu.userName;
                       string json = JsonConvert.SerializeObject(lst);
                       string urlfull = url+"/api/WanJi_Morder";
                       string cRe = SMLWeb.PostApi("POST", urlfull, json);
                       
                       //处理返回结果
                       RetModel2 ret = JsonConvert.DeserializeObject<RetModel2>(cRe);
                       if (ret.code == 200)
                       {
                           //回写成功信息
                           foreach (var item in group)
                           {
                               item.cImportResult = "导入成功：" + ret.message;
                           }
                           totalSuccessCount += group.Count();
                       }
                       else
                       {
                           //回写失败信息
                           foreach (var item in group)
                           {
                               item.cImportResult = "导入失败：" + ret.message;
                           }
                       }
                   }
               }
               
               //刷新数据
               gridControl1.RefreshDataSource();
               gridView1.RefreshData();
               
               //显示处理结果
               MessageBox.Show(string.Format("生产订单生成完成！共处理 {0} 条记录，成功 {1} 条，失败 {2} 条。\n请查看【导入错误】列了解详情。", 
                   totalProcessedCount, totalSuccessCount, totalProcessedCount - totalSuccessCount), 
                   "处理完成", MessageBoxButtons.OK, MessageBoxIcon.Information);

               bChecked = false;
               bCheckU8 = false;


               

           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message);
               return;
           }
            

       }
       #endregion

       private void gridControl1_Click(object sender, EventArgs e)
       {

       }

 

       #region 辅助方法
       /// <summary>
       /// 创建一个新的WanJi_Morder_View对象，并复制原始对象的所有属性
       /// </summary>
       /// <param name="originalItem">原始对象</param>
       /// <returns>新的对象副本</returns>
       private WanJi_Morder_View CreateNewItem(WanJi_Morder_View originalItem)
       {
           WanJi_Morder_View newItem = new WanJi_Morder_View();
           
           //复制基类属性
           newItem.cRowNo = originalItem.cRowNo;
           newItem.cMoCode = originalItem.cMoCode;
           newItem.cSoCode = originalItem.cSoCode;
           newItem.cCusName = originalItem.cCusName;
           newItem.cXiLie = originalItem.cXiLie;
           newItem.cOperation = originalItem.cOperation;
           newItem.cJiZhongName = originalItem.cJiZhongName;
           newItem.cCusOrderCode = originalItem.cCusOrderCode;
           newItem.dDate = originalItem.dDate;
           newItem.iQty = originalItem.iQty;
           newItem.cDangWei = originalItem.cDangWei;
           newItem.cMemo = originalItem.cMemo;
           newItem.cInvCodeSMT = originalItem.cInvCodeSMT;
           newItem.cInvCodeDIP = originalItem.cInvCodeDIP;
           newItem.cInvCodeHou = originalItem.cInvCodeHou;
         
           //复制派生类属性
           newItem.chk = originalItem.chk;
           newItem.bU8 = originalItem.bU8;
           newItem.cImportResult = originalItem.cImportResult;
           newItem.cDepCodeSMT = originalItem.cDepCodeSMT;
           newItem.cWhCodeSMT = originalItem.cWhCodeSMT;
           newItem.cDepCodeDIP = originalItem.cDepCodeDIP;
           newItem.cWhCodeDIP = originalItem.cWhCodeDIP;
           newItem.cDepCodeHOU = originalItem.cDepCodeHOU;
           newItem.cWhCodeHOU = originalItem.cWhCodeHOU;
           
           return newItem;
       }
       #endregion

 

       #region 导出excel
       public void Menu_Excel()
       {

           SaveFileDialog saveFileDialog = new SaveFileDialog();
           saveFileDialog.Title = "导出Excel"; 
           saveFileDialog.Filter = "Excel文件(*.xls)|*.xls"; DialogResult dialogResult = saveFileDialog.ShowDialog(this);

           if (dialogResult == DialogResult.OK)
           {
               //DevExpress.XtraPrinting.XlsExportOptions options = new DevExpress.XtraPrinting.XlsExportOptions();

               gridView1.OptionsPrint.AutoWidth = false;
               gridView1.ExportToXlsx(saveFileDialog.FileName);
               DevExpress.XtraEditors.XtraMessageBox.Show("保存成功！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
           }

       }
       #endregion
         



       #region 增加序号
       private void gridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
        {

            if (e.Info.IsRowIndicator && e.RowHandle >= 0)
            { 
                e.Info.DisplayText = (e.RowHandle + 1).ToString(); 
            }

        }
       #endregion

       #region 序号列宽度更改
       private void gridView1_RowCountChanged(object sender, EventArgs e)
          {

              //动态设置第一列的宽度
              //string MeasureString = String.Format("{0}WA", gridView1.RowCount);
              //gridView1.IndicatorWidth = this.gridControl1.CreateGraphics().MeasureString(MeasureString, new Font("宋体", 9)).ToSize().Width;

          }
       #endregion


       #region 删除空行
       protected void RemoveEmpty(DataTable dt)
          {
              List<DataRow> removelist = new List<DataRow>();
              for (int i = 0; i < dt.Rows.Count; i++)
              {
                  bool IsNull = true;
                  for (int j = 0; j < dt.Columns.Count; j++)
                  {
                      if (!string.IsNullOrEmpty(dt.Rows[i][j].ToString().Trim()))
                      {
                          IsNull = false;
                      }
                  }
                  if (IsNull)
                  {
                      removelist.Add(dt.Rows[i]);
                  }
              }
              for (int i = 0; i < removelist.Count; i++)
              {
                  dt.Rows.Remove(removelist[i]);
              }
          }
       #endregion

       private void txtcPsn_Click(object sender, EventArgs e)
          {

          }

          #region 查询条件，按钮弹窗选择
        
          private void txtdept_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
          {
              e.Button.Enabled = false;
              //try
              //{

              //    DataTable dtFilter = DepService.GetDepartmentDT("", CanShu.u8Login.cUserId, CanShu.conStr, CanShu.bDepartAdmin);
              //    frm_canzhao frm = new frm_canzhao(dtFilter, this.txtdept.Text, "部门参照");
              //    frm.ShowDialog();
              //    if (frm.drxz != null)
              //    {
              //        //this.txtdept.Tag = DbHelper.GetDbString(frm.drxz["编码"]);
              //        this.txtdept.EditValue = DbHelper.GetDbString(frm.drxz["编码"]);
              //    }
              //}
              //catch (Exception EX)
              //{
              //    MessageBox.Show(EX.Message);
              //    return;
              //}
              e.Button.Enabled = true;
          }

          
          #endregion

          #region 表格内弹窗选择
          private void MOItemButtonEdit_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
          {
              
              //var focusedRow = gridView1.GetFocusedRow() as WanJi_Morder_Entity;
                      
              //            e.Button.Enabled = false;
              //            try
              //            {
              //                DataTable dtFilter = GetMoInfo(CanShu.conStr);
              //                frm_canzhao frm = new frm_canzhao(dtFilter, DbHelper.GetDbString(focusedRow.cMoCode), "生产订单");
              //                frm.ShowDialog();
              //                if (frm.drxz != null)
              //                {
              //                    focusedRow.cMoCode = DbHelper.GetDbString(frm.drxz["生产订单号"]);
              //                    focusedRow.cInvCode = DbHelper.GetDbString(frm.drxz["产品编码"]);  
              //                    gridView1.UpdateCurrentRow();
              //                }
              //            }
              //            catch (Exception ex)
              //            {
              //                MessageBox.Show(ex.Message);
              //            }
              //        e.Button.Enabled = true; 
          }

         
          #endregion

          private void button1_Click(object sender, EventArgs e)
          {
              TestExcelImportForm test = new TestExcelImportForm();
              test.Show();
          }

     

          
    }
}
